package com.controller;

import com.ejb.RecursoFacade;
import com.entidades.Recurso;
import com.entidades.TipoEstado;
import com.exceptions.BancoException;

import javax.faces.bean.ManagedBean;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

@ManagedBean(name = "gestorRecurso")
@ViewScoped
public class GestorRecursoController {

    private List<Recurso> listaRecurso;
    private Recurso recursoSelected;
    private Recurso recurso;
    @EJB
    RecursoFacade ejbRecurso;

    //En el constructor no se puede usar el EJB porque no se ha ejecutado el inject, se debe hacer en el init
    public GestorRecursoController() {
        System.out.println("Se ejecuta constructor en clase GestorrecursoController");
        recurso = new Recurso();
    }

    @PostConstruct
    public void init() {
        System.out.println("Se ejecuta init() en clase GestorrecursoController");
        listaRecurso = ejbRecurso.findAll();
    }

    public List<Recurso> getListaRecurso() {
        return listaRecurso;
    }

    public void setListaRecurso(List<Recurso> listaRecurso) {
        this.listaRecurso = listaRecurso;
    }

    public Recurso getRecursoSelected() {
        return recursoSelected;
    }

    /*
     * Para demostrar que es mejor tener un solo controller para acciones relacionadas
     * con una misma entidad, se requiere refrescar la lista en pantalla
     */
    public void testAction() {
        System.out.println("testAction ejecutado con exito");
    }

    public Recurso getRecurso() {
        return recurso;
    }

    public void setRecurso(Recurso recurso) {
        this.recurso = recurso;
    }

    public void crearRecurso() {
        String msg = "recurso creado con exito !!!";
        try {
            System.out.printf("aqui salo1");
            ejbRecurso.crearRecurso(recurso);
            System.out.printf("aqui salo");
        } catch (BancoException be) {
            msg = be.getMessage();
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));
    }

    public void setRecursoSelected(Recurso cte) {

        this.recursoSelected = cte;
        this.recurso = cte;
        System.out.println("Recurso seleccionado " + recurso.getCodigorecurso());

    }

    public SelectItem[] tipoEstadoValues() {
        SelectItem[] items = new SelectItem[TipoEstado.values().length];
        int i = 0;
        for (TipoEstado ti : TipoEstado.values()) {
            items[i++] = new SelectItem(ti, ti.getLabel());
        }
        return items;
    }

    public void modificarRecurso() {
        System.out.println("Se invoca accion modificar cliente " + recurso.getCodigorecurso());
        String msg = "Cliente actualizado con exito !!!";
        try {
            System.out.println("Nombre a modificar: " + recurso.getCodigorecurso());
            ejbRecurso.modificarCliente(recurso);
            System.out.println("Se actualizo cliente " + recurso.getCodigorecurso());
        } catch (Exception be) {
            msg = be.getMessage();
            System.out.println("Error:" + msg);
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));
    }

    public void eliminarRecurso() {
        System.out.println("Se invoca accion elimar cliente " + recursoSelected.getCodigorecurso());
        String msg = "Cliente eliminado con exito !!!";
        try {
            ejbRecurso.remove(recursoSelected);
            listaRecurso.remove(recursoSelected);
        } catch (Exception be) {
            msg = be.getMessage();
        }
        FacesContext.getCurrentInstance().addMessage("mensajes", new FacesMessage(msg));
    }
}
